/*
 *  Theory0039.h
 *  SoundController0002
 *
 *  Created by jiro on 11/07/17.
 *  Copyright 2011 jiro music. All rights reserved.
 *
 */
#pragma once

#include "Theory0039_Chord.h"
#include "Theory0039_SingleGroupGenerator.h"
#include "Theroy0039_ClassifiedChords.h"
#include "../HarmonicSystem/Sound.h"
#include <vector>

namespace theory0039
{

	class Theory
	{
	public:

		static const char* className_1_1;

		static const char* className_1_2;
		
		static const char* className_2_1_1;
		
		static const char* className_2_1_2;
		
		static const char* className_2_2;

	public:

		enum
		{
			ClassCount = 5,
		};

		static void ClassifyChord(
			const std::vector< SingleGroupGenerator >& generators, 
			const std::vector< sc::Note::Id >& startNotes,
			ClassifiedChords& classifiedChords );

		static bool IsContain( const std::vector< Chord >& chords, const Chord& chord );
		
		static void Sort( const sc::hs::Sound::NearbyWellTemperamentNotes& notes, std::vector< sc::hs::Sound::NearbyWellTemperamentNotes >& sortedNotesList );

	};

}
